package com.ruoyi.business.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.ruoyi.business.domain.PressureFlowData;
import com.ruoyi.business.vo.AirPressureGroupVO;
import com.ruoyi.business.vo.ExperimentTimeRangeVO;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

/**
 * 压力流量数据Mapper接口
 * 
 * @author qiancheng
 * @date 2025-09-16
 */
@Mapper
public interface PressureFlowDataMapper extends BaseMapper<PressureFlowData>
{
    /**
     * 查询压力流量数据
     * 
     * @param id 压力流量数据主键
     * @return 压力流量数据
     */
    public PressureFlowData selectPressureFlowDataById(Long id);

    /**
     * 查询压力流量数据列表
     * 
     * @param pressureFlowData 压力流量数据
     * @return 压力流量数据集合
     */
    public List<PressureFlowData> selectPressureFlowDataList(PressureFlowData pressureFlowData);

    /**
     * 新增压力流量数据
     * 
     * @param pressureFlowData 压力流量数据
     * @return 结果
     */
    public int insertPressureFlowData(PressureFlowData pressureFlowData);

    /**
     * 修改压力流量数据
     * 
     * @param pressureFlowData 压力流量数据
     * @return 结果
     */
    public int updatePressureFlowData(PressureFlowData pressureFlowData);

    /**
     * 删除压力流量数据
     * 
     * @param id 压力流量数据主键
     * @return 结果
     */
    public int deletePressureFlowDataById(Long id);

    /**
     * 批量删除压力流量数据
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePressureFlowDataByIds(Long[] ids);

    /**
     * 根据采集时间查询压力流量数据
     *
     * @param collectTime 采集时间
     * @return 压力流量数据列表
     */
    List<PressureFlowData> selectByImportTime(@Param("collectTime") Date collectTime,
                                              @Param("mergedValue") BigDecimal mergedValue);

    /**
     * 查询所有数据并按气压分组（用于图表）
     * @param importDay 导入日期
     * @param startTime 实验开始时间（HH:mm）
     * @param endTime   实验结束时间（HH:mm）
     * @return 按气压分组的 PressureFlowData 列表
     */
    List<PressureFlowData> selectGroupedByAirPressure(
            @Param("importDay") Date importDay,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime);


    /**
     * 查询所有不重复的导入时间
     *
     * @return 导入时间列表
     */
    List<Date> selectDistinctImportTime();

    /**
     * 查询某次导入时间下的实验时间范围（去重）
     *
     * @param importDay 导入时间
     * @return 实验时间范围列表
     */
    List<ExperimentTimeRangeVO> selectTimeRangesByImportDay(@Param("importDay") Date importDay);

}
